//引入方法
import qs from "qs"

// 全局请求封装
const base_url = 'http://localhost:3000'
// 请求超出时间
const timeout = 5000

// 延迟多久关闭Toast
const showToastDuration = "2000"

/* 
params:
	url:请求路径
  method:请求方法
	data:请求参数
	header:请求头
loading:是否开启加载，默认为false
 */
// 需要修改token，和根据实际修改请求头
export default (params, loading = false) => {
	let url = params.url;
	let method = params.method || "get";
	let data = params.data || {};
	let paramsHeader = params.header ? params.header : {}

	let header = {
		// 'Blade-Auth': uni.getStorageSync('token') || '',
		'Content-Type': 'application/json;charset=UTF-8',
		...paramsHeader
	}

	if (method == "post") {
		header = {
			'Content-Type': "application/x-www-form-urlencoded",
			...paramsHeader
		}
		data = qs.stringify(params.data)
	}

	// 生成唯一ID, 如果返回false 代表重复请求
	let requestId = manager.generateId(method, url, data)

	// 开启loading
	loading && uni.showLoading({
		title: 'loading'
	})

	if (!requestId) {
		console.log('重复请求')
		// return false
	}

	/* 
	code码
	 400:请求参数不正确
	 401:未登录
	 402:账号异常
	 404:地址不存在
	 450:请求频繁
	 */

	return new Promise((resolve, reject) => {
		uni.request({
			url: base_url + url,
			method: method,
			header: header,
			data: data,
			timeout,
			success: (response) => {
				const res = response.data
				// 根据返回的状态码做出对应的操作
				//获取成功
				// console.log(res);
				if (res.code == 200) {
					resolve(res.data);
				} else {
					switch (res.code) {
						case 400:
							uni.showToast({
								title: res.msg,
								duration: showToastDuration,
								icon: "error"
							})
							resolve(res);
							break;
						case 401:
							uni.showModal({
								title: "提示",
								content: "请登录",
								showCancel: false,
								success() {
									setTimeout(() => {
										uni.navigateTo({
											url: "/pages/login/index",
										})
									}, 1000);
								},
							});
							break;
						case 402:
							uni.showToast({
								title: res.msg,
								duration: showToastDuration,
								icon: "error"
							})
							resolve(res);
							break;
						case 404:
							uni.showToast({
								title: res.msg,
								duration: showToastDuration,
								icon: "error"
							})
							resolve(res);
							break;
						case 450:
							uni.showToast({
								title: res.msg,
								duration: showToastDuration,
								icon: "error"
							})
							resolve(res);
							break;
						default:
							uni.showToast({
								title: res.msg,
								duration: showToastDuration,
								icon: "error"
							})
							resolve(res);
							break;
					}
				}
			},
			fail(err) {
				console.error("请求已发出，请求异常", err)
				if (err.errMsg.indexOf('request:fail') !== -1) {
					uni.showToast({
						title: '网络异常',
						icon: "error",
						duration: showToastDuration
					})
				} else {
					uni.showToast({
						title: '未知异常',
						icon: "error",
						duration: showToastDuration
					})
				}
				reject(err);
			},
			// 不管成功还是失败都会执行
			complete() {
				if (loading) {
					uni.hideLoading();
				}
				// uni.hideToast();
				// manager.deleteById(requestId)
				resolve();
				return;
			}
		});
	}).catch((err) => {
		console.log(err, "请求出错,请求未发送成功");
	});

};